Load Signac and Seurat

library(Signac)
library(Seurat)

Perform standard pre-processing steps with Seurat

# load dataset
E = Read10X_h5(filename = "../../Data/CITESEQ_EXPLORATORY_CITESEQ_5K_PBMCS/rawdata/Sample1/pbmc_10k_protein_v3_raw_feature_bc_matrix.h5")
pbmc <- CreateSeuratObject(counts = E$`Gene Expression`, project = "pbmc5k", min.cells = 3, min.features = 200)
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 10)
pbmc <- NormalizeData(object = pbmc, verbose = F)
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)
pbmc <- ScaleData(pbmc)
pbmc <- RunPCA(pbmc, verbose = F)
pbmc <- FindNeighbors(pbmc, dims = 1:25)
pbmc <- FindClusters(pbmc, resolution = 0.8)
pbmc <- RunUMAP(pbmc, dims = 1:10)

Generate Signac labels for the Seurat object

# Run Signac
data("training_HPCA")
labels <- Signac(pbmc, R = training_HPCA) # optionally do parallel computing by setting num.cores > 1
celltypes = Generate_lbls(labels, E = pbmc)

Immune cells

pbmc <- Seurat::AddMetaData(pbmc, metadata=celltypes$Immune, col.name = "immmune")
pbmc <- Seurat::SetIdent(pbmc, value='immmune')
DimPlot(pbmc)

Lymphocytes and myeloid cells

pbmc <- Seurat::AddMetaData(pbmc, metadata=celltypes$L2, col.name = "celltypes")
pbmc <- Seurat::SetIdent(pbmc, value='celltypes')
DimPlot(pbmc)

Broad cell types

lbls = factor(celltypes$CellTypes)
levels(lbls) <- sort(unique(lbls))
pbmc <- Seurat::AddMetaData(pbmc, metadata=lbls, col.name = "celltypes")
pbmc <- Seurat::SetIdent(pbmc, value='celltypes')
DimPlot(pbmc)

Immune phenotypes

lbls = factor(celltypes$CellStates)
levels(lbls) <- sort(unique(lbls))
pbmc <- Seurat::AddMetaData(pbmc, metadata=lbls, col.name = "celltypes")
pbmc <- Seurat::SetIdent(pbmc, value='celltypes')
DimPlot(pbmc)

Immune phenotypes with novel cell type discovery

lbls = factor(celltypes$CellStates_novel)
levels(lbls) <- sort(unique(lbls))
pbmc <- Seurat::AddMetaData(pbmc, metadata=lbls, col.name = "celltypes")
pbmc <- Seurat::SetIdent(pbmc, value='celltypes')
DimPlot(pbmc)

Add protein expression information

pbmc[["ADT"]] <- CreateAssayObject(counts = E$`Antibody Capture`[,colnames(E$`Antibody Capture`) %in% colnames(pbmc)])
## Warning: Feature names cannot have underscores ('_'), replacing with dashes ('-')
pbmc <- NormalizeData(pbmc, assay = "ADT", normalization.method = "CLR")
pbmc <- ScaleData(pbmc, assay = "ADT")

Visualize protein information on the RNA clustering result

FeaturePlot(pbmc, features = c("CD8a-TotalSeqB", "CD8A"), ncol = 2)
## Warning: Could not find CD8A in the default search locations, found in RNA assay instead

RidgePlot(pbmc, features = c("CD8a-TotalSeqB", "CD4-TotalSeqB"), ncol = 2)

Identify differentially expressed proteins between clusters

# Downsample the clusters to a maximum of 500 cells each (makes the heatmap easier to see for
# small clusters)
pbmc.small <- subset(pbmc, downsample = 500)

# Find protein markers for all clusters, and draw a heatmap
adt.markers <- FindAllMarkers(pbmc.small, assay = "ADT", only.pos = TRUE, verbose = F)
DoHeatmap(pbmc.small, features = unique(adt.markers$gene), assay = "ADT", angle = 90) + NoLegend()

DefaultAssay(pbmc) <- "ADT"

Cluster the data based on protein expression information.

pbmc <- FindVariableFeatures(pbmc, selection.method = "vst")
pbmc <- ScaleData(pbmc)
pbmc <- RunPCA(pbmc, verbose = F)
## Warning in irlba(A = t(x = object), nv = npcs, ...): You're computing too large a percentage of total singular values, use a standard svd instead.
pbmc <- FindNeighbors(pbmc)
pbmc <- FindClusters(pbmc, resolution = 0.8)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 6891
## Number of edges: 231988
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8841
## Number of communities: 13
## Elapsed time: 0 seconds
pbmc <- RunUMAP(pbmc, dims = 1:10)

Visualize Signac cell types on protein clusters

lbls = factor(celltypes$CellTypes)
levels(lbls) <- sort(unique(lbls))
pbmc <- Seurat::AddMetaData(pbmc, metadata=lbls, col.name = "celltypes")
pbmc <- Seurat::SetIdent(pbmc, value='celltypes')
DimPlot(pbmc)

lbls = factor(celltypes$CellStates)
levels(lbls) <- sort(unique(lbls))
pbmc <- Seurat::AddMetaData(pbmc, metadata=lbls, col.name = "celltypes")
pbmc <- Seurat::SetIdent(pbmc, value='celltypes')
DimPlot(pbmc)

FeaturePlot(pbmc, features = c("CD8a-TotalSeqB", "CD8A"))
## Warning: Could not find CD8A in the default search locations, found in RNA assay instead


A work by Mathew Chamberlain

mathew.chamberlain@sanofi.com